package gateway

// CommonResponse 统一的JSON返回结果
type CommonResponse struct {
	ResponseMetadata ResponseMetadata
	Result           interface{} `json:"Result,omitempty"`
}

type ResponseMetadata struct {
	RequestId string
	Service   string    `json:",omitempty"`
	Region    string    `json:",omitempty"`
	Action    string    `json:",omitempty"`
	Version   string    `json:",omitempty"`
	Error     *ErrorObj `json:",omitempty"`
}

type ErrorObj struct {
	CodeN   int
	Code    string
	Message string
}

type MonitorConfig struct {
	FreezeCheckInterval int `json:"FreezeCheckInterval"`
	BlankCheckInterval  int `json:"BlankCheckInterval"`
	CrashCheckInterval  int `json:"CrashCheckInterval"`
}

type EventNotifyConfig struct {
	EnableEventNotify bool `json:"EnableEventNotify"`
	StartTimeout      int  `json:"StartTimeout"`
}

type StartWebCastParams struct {
	AppId       string             `json:"AppId"`
	BusinessId  string             `json:"BusinessId"`
	RoomID      string             `json:"RoomId"`
	TaskId      string             `json:"TaskId"`
	UserId      string             `json:"UserId"`
	SourceURL   string             `json:"SourceURL"`
	Monitor     *MonitorConfig     `json:"Monitor"`
	EventNotify *EventNotifyConfig `json:"EventNotify"`
}

type StopWebCastParams struct {
	AppId  string `json:"AppId"`
	RoomID string `json:"RoomId"`
	TaskId string `json:"TaskId"`
}

type StartRecordParams struct {
	AppId         string `json:"AppId"`
	RoomID        string `json:"RoomId"`
	TaskId        string `json:"TaskId"`
	RecordMode    int    `json:"RecordMode"`
	StorageConfig `json:"StorageConfig"`
	TargetStreams Streams `json:"TargetStreams"`
}
type StorageConfig struct {
	Type      int `json:"Type"`
	TosConfig `json:"TosConfig"`
	VodConfig `json:"VodConfig"`
}

type TosConfig struct {
	AccountId string `json:"AccountId"`
	Bucket    string `json:"Bucket"`
}

type VodConfig struct {
	AccountId string `json:"AccountId"`
	Space     string `json:"Space"`
}
type Streams struct {
	StreamList []Stream `json:"StreamList"`
}
type Stream struct {
	Index  int32  `json:"Index"`
	UserId string `json:"UserId"`
}

type StopRecordParams struct {
	AppId  string `json:"AppId"`
	RoomID string `json:"RoomId"`
	TaskId string `json:"TaskId"`
}

type sendUnicastParam struct {
	AppID   string `json:"AppId"`
	From    string `json:"From"`
	To      string `json:"To"`
	Binary  bool   `json:"Binary"`
	Message string `json:"Message"`
}
type sendRoomUnicastParam struct {
	sendUnicastParam
	RoomID string `json:"RoomId"`
}

type sendBroadcastParam struct {
	AppID   string `json:"AppId"`
	RoomID  string `json:"RoomId"`
	From    string `json:"From"`
	Binary  bool   `json:"Binary"`
	Message string `json:"Message"`
}

type genTokenParam struct {
	AppID  string `json:"AppID"`
	RoomID string `json:"RoomID"`
	UserID string `json:"UserID"`
}
type genTokenResult struct {
	Token      string `json:"Token"`
	ExpireTime string `json:"ExpireTime"`
}
